A wide variety of memory devices can be used to maintain and store data and instructions for various computers and similar systems. In particular, flash memory is a type of electronic memory media that can be rewritten and that can retain content without consumption of power. Unlike dynamic random access memory (DRAM) devices and static random memory (SRAM) devices in which a single byte can be erased, flash memory devices are typically erased in fixed multi-bit blocks or sectors. Flash memory technology can include NOR flash memory and NAND flash memory, for example. NOR flash memory evolved from electrically erasable read only memory (EEPROM) chip technology, in which, unlike flash memory, a single byte can be erased; and NAND flash memory evolved from DRAM technology. Flash memory devices typically are less expensive and denser as compared to many other memory devices, meaning that flash memory devices can store more data per unit area.
Flash memory has become popular, at least in part, because it combines the advantages of the high density and low cost of EPROM with the electrical erasability of EEPROM. Flash memory is nonvolatile; it can be rewritten and can hold its content without power. It can be used in many portable electronic products, such as cell phones, portable computers, voice recorders, thumbnail drives and the like, as well as in many larger electronic systems, such as cars, planes, industrial control systems, etc. The fact that flash memory can be rewritten, as well as its retention of data without a power source, small size, and light weight, have all combined to make flash memory devices useful and popular means for transporting and maintaining data.
NOR flash memory includes certain features which can make it desirable to users (e.g., consumers). NOR flash memory can facilitate fast random access reads and can generally allow programming granularity down to the byte/word level. As memory devices, including NOR flash devices, approach gigabit densities, memory devices can become more susceptible to errors, such as, for example, errors due to single-bit charge loss. A common way of improving the reliability of memory devices can be to extend the storage area of a memory device at the cost of efficiency in order to store error correction code (ECC), which can be utilized to facilitate correcting errors.
However, unlike in certain non-volatile devices, in NOR flash memory devices it is not possible to revert to a ‘1’ after a bit has been programmed to ‘0’. As a result, ECC can be difficult to implement in flash devices, particularly flash memory devices that include NOR flash memory. For instance, virtually every time the data in a memory location is updated, in order to have valid ECC, a new set of ECC would have to be rewritten based on the updated data, and almost invariably, a ‘0’ will have to be converted into ‘1’, which is not possible with a NOR flash device. Yet, ECC techniques have begun to be employed in flash memory devices.
For example, ECC has been employed in NAND flash devices, which typically can be less robust for data storage retention, in order to cope with charge loss/gain mechanism. NAND applications, typically for mass storage, require data to be programmed in huge chunks (e.g., ≧512 bits) at a time. However, implementing ECC in a NOR flash device in a manner similar to that of NAND devices can be problematic as such an ECC implementation can result in the writing mechanism being unduly restrictive, random access read speeds being severely degraded, and further, much of the legacy software having to be rewritten to accommodate such ECC techniques. As a result, conventional ECC techniques are not desirable, as such drawbacks can result in the NOR flash memory device being less desirable to users, such as consumers.
It is desirable to be able to implement error correction in NOR flash memory devices while preserving the advantages of NOR flash memory devices, such as the flexibility of byte/word programming, overwriting/updating, and fast random access read speeds, as well as enabling users to maintain the use of legacy software.